.\"
.\" This file and its contents are supplied under the terms of the
.\" Common Development and Distribution License ("CDDL"), version 1.0.
.\" You may only use this file in accordance with the terms of version
.\" 1.0 of the CDDL.
.\"
.\" A full copy of the text of the CDDL should have accompanied this
.\" source.  A copy of the CDDL is also available via the Internet at
.\" http://www.illumos.org/license/CDDL.
.\"
.\"
.\" Copyright 2015 Joyent, Inc.
.\"
.Dd May 07, 2015
.Dt AVL_NEAREST 3AVL
.Os
.Sh NAME
.Nm avl_nearest
.Nd find the nearest node in an AVL tree
.Sh SYNOPSIS
.Lb libavl
.In sys/avl.h
.Ft void *
.Fo avl_nearest
.Fa "avl_tree_t *tree"
.Fa "avl_index_t where"
.Fa "int direction"
.Fc
.Sh DESCRIPTION
The
.Fa avl_nearest
function returns the closest node in
.Fa tree
before or after the insertion point specified by
.Fa where .
.Pp
The value of
.Fa where
is obtained when a
.Pf non- Dv NULL
pointer is passed in to the
.Fa where
argument of
.Xr avl_find 3AVL
and it fails to find an entry in the tree.
.Pp
If
.Fa direction
is set to
.Dv AVL_AFTER ,
then the node that would logically have followed it will be returned.
If
.Fa direction
is instead set to
.Dv AVL_BEFORE ,
then the node that would have logically preceded it is returned.
.Pp
When there is no nearest node, for example,
.Dv AVL_AFTER
is specified and the entry would have been the last node in the tree,
then
.Sy NULL is returned .
.Pp
If the tree is modified between a call to
.Xr avl_find 3AVL
and
.Fn avl_nearest ,
then the value of
.Fa where
from
.Xr avl_find 3AVL
will no longer be valid and
.Xr avl_find 3AVL
must be called again.
.Sh RETURN VALUES
The
.Fn avl_nearest
function returns the node that is closest or
.Sy NULL
if there is not a matching one.
.Sh EXAMPLES
See the
.Sy EXAMPLES
section in
.Xr libavl 3LIB .
.Sh INTERFACE STABILITY
.Sy Committed
.Sh MT-Level
See
.Sx Locking
in
.Xr libavl 3LIB .
.Sh SEE ALSO
.Xr libavl 3LIB
